home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / Falcon / WHIP031 / VLM / WHIPBL10 / SOURCE / BLUROSCI.S next >
Encoding:
Text File  |  1999-06-21  |  6.8 KB  |  355 lines

  1. ;
  2. ; VLM EXAMPLE MODULE                                             NO/Escape'98
  3. ;
  4.  
  5.         section    text
  6.  
  7. *** VLM STRUCTURE **************************************************************
  8.  
  9.         dc.b    "VLM2"        ;vlm module type
  10.         dc.l    infotext    ;pointer to infotext
  11.         dc.l    settings    ;pointer to settings-structure
  12.         dc.l    init        ;pointer to init routine
  13.         dc.l    deinit        ;pointer to deinit routine
  14.         dc.l    main        ;pointer to mainloop routine
  15.  
  16. ;SERVICE ROUTINES PROVIDED BY THE CALLING PROGRAM
  17.  
  18. set_vblrout:
  19. ;a0: new vbl subroutine
  20.         movea.l service_struct,a1
  21.         movea.l (a1),a1
  22.         jsr     (a1)
  23.         rts
  24.  
  25. wait_vbl:    movea.l    service_struct,a1
  26.         movea.l    4(a1),a1
  27.         jsr    (a1)
  28.         rts
  29.  
  30. set_scradr:
  31. ;a0: new screen adress
  32.         movea.l    service_struct,a1
  33.         movea.l    8(a1),a1
  34.         jsr    (a1)
  35.         rts
  36.  
  37. set_resolution:
  38. ;d0: number of the wanted resolution
  39.         movea.l    service_struct,a1
  40.         movea.l    12(a1),a1
  41.         jsr    (a1)
  42.         rts
  43.  
  44. get_left_spec:    movea.l    service_struct,a1
  45.         movea.l    16(a1),a1
  46.         jsr    (a1)        ;returns in a0 the adress of left spec
  47.                 rts
  48.  
  49. get_right_spec:    movea.l    service_struct,a1
  50.         movea.l    20(a1),a1
  51.         jsr    (a1)            ;returns in a0 the adress of right spec
  52.         rts
  53.  
  54. get_left_volume:movea.l    service_struct,a1
  55.         movea.l 24(A1),A1
  56.         jsr    (A1)        ;returns in d0 the left volume value
  57.         rts
  58.  
  59. get_right_volume:
  60.         movea.l service_struct,a1
  61.         movea.l 28(a1),a1
  62.         jsr    (a1)        ;returns in d0 the right volume value
  63.         rts
  64.  
  65. get_left_osci:    movea.l service_struct,a1
  66.         movea.l    32(A1),a1
  67.         jsr    (a1)        ;returns in a0 the adress of osci data
  68.         rts
  69.  
  70. get_right_osci:    movea.l    service_struct,a1
  71.         movea.l    36(a1),a1
  72.         jsr    (a1)        ;returns in a0 the adress of osci data
  73.         rts
  74.  
  75. service_struct:    dc.l    0        ;must be set in 'init'
  76.  
  77. ********************************************************************************
  78. infotext:       
  79.         dc.b    'blur oscillo',0
  80.         dc.b    ' author: evil ',0
  81.         dc.b    'version: 1.0',0
  82.         dc.b    '   date: june 22, 1999',0
  83.         dc.b    0
  84.         even
  85.  
  86. settings:       dc.l    3
  87.  
  88.         dc.l    colourname
  89.         dc.l    2
  90. colour:        dc.l    0
  91.         dc.l    colourstruct
  92.  
  93.         dc.l    xname
  94.         dc.l    3
  95. xadd:        dc.l    3
  96.         dc.l    xstruct
  97.  
  98.         dc.l    yname
  99.         dc.l    3
  100. yadd:        dc.l    4
  101.         dc.l    ystruct
  102.  
  103. xstruct:    dc.l    0,20
  104. ystruct:    dc.l    0,20
  105.  
  106. xname:        dc.b    'X-SINUS:',0
  107.         even
  108. yname:        dc.b    'Y-SINUS:',0
  109.         even
  110. colourname:    dc.b    'SELECT COLOURS:',0
  111.         even
  112. colourstruct:    dc.l    3
  113.         dc.b    'DEFAULT',0
  114.         dc.b    'SAFTSOPPA',0
  115.         dc.b    'RECTUM',0
  116.         even
  117.  
  118.  
  119.  
  120.  
  121. init:           
  122. ;a0: service structure
  123.         move.l    a0,service_struct
  124.         bsr.w    blur_init
  125.         bsr.w    clear_screens
  126.         movea.l    scradr2,a0    ;set new screen adress
  127.         bsr.w    set_scradr
  128.         move.l    #2,d0        ;set resolution to 320x100
  129.         bsr.w    set_resolution
  130.                 rts
  131. deinit:        rts
  132.  
  133.  
  134. clear_screens:    move.l    scradr1,a0
  135.         move.l    scradr2,a1
  136.         move.l    scradr3,a2
  137.         move.w    #320*100*2/64-1,d7
  138. .loop:        rept    16
  139.         clr.l    (a0)+
  140.         clr.l    (a1)+
  141.         clr.l    (a2)+
  142.         endr
  143.         dbra    d7,.loop
  144.         rts
  145.  
  146.  
  147. main:        jsr    switch_screens
  148.         bsr.w    blur_main
  149.         rts            ;end of the mainroutine
  150.  
  151.  
  152.  
  153. blur_vbl:    add.l    #2+512,blur_scroll
  154.         and.l    #$1ffff,blur_scroll
  155.         move.l    xadd,d0
  156.         lsl.l    #2,d0
  157.         add.l    d0,xsin
  158.         and.l    #$1fff,xsin
  159.         move.l    yadd,d0
  160.         lsl.l    #2,d0
  161.         add.l    d0,ysin
  162.         and.l    #$1fff,ysin
  163.         rts
  164.  
  165.  
  166. blur_main:    bsr.w    draw_blur
  167.         bsr.w    draw_oscillos
  168.         rts
  169.  
  170.  
  171. draw_blur:    lea.l    sinus,a0
  172.                 move.l    xsin,d0
  173.             move.l    (a0,d0.w),d1
  174.                 muls.w    #288,d1
  175.                 asr.l    #8,d1
  176.                 asr.l    #7,d1
  177.         bclr    #0,d1
  178.         move.l    d1,xpos
  179.                 move.l    ysin,d0
  180.                 move.l    (a0,d0.w),d1
  181.                 muls.w    #100,d1
  182.                 asr.l    #8,d1
  183.                 asr.l    #7,d1
  184.         muls.w    #576,d1
  185.         move.l    d1,ypos
  186.         move.l    scradr1,a0
  187.         lea.l    64(a0),a0
  188.         move.l    scradr2,a1
  189.         lea.l    64(a1),a1
  190.         lea.l    lut+576*50+160,a2
  191.         add.l    xpos,a2
  192.         add.l    ypos,a2
  193.         lea.l    startdata(pc),a3
  194.         add.l    #startbss-startdata+64*1024*2,a3
  195.         add.l    blur_scroll,a3
  196.         lea.l    startdata(pc),a4
  197.         add.l    #startbss-startdata,a4
  198.         clr.l    d0
  199.         clr.l    d1
  200.         move.w    #100-1,d7
  201. .loop:        move.w    #128-1,d6
  202. .loop2:        move.w    (a1),d0
  203.         addq.l    #4,a1
  204.         move.w    (a4,d0.l*2),d0
  205.         move.w    (a2)+,d1
  206.         add.w    (a3,d1.l*2),d0
  207.         move.w    d0,(a0)+
  208.         move.w    d0,(a0)+
  209.         dbra    d6,.loop2
  210.         lea.l    128(a0),a0
  211.         lea.l    128(a1),a1
  212.         lea.l    576-256(a2),a2
  213.         dbra    d7,.loop
  214.         rts
  215.  
  216.  
  217. blur_scroll:    ds.l    1
  218. xsin:        ds.l    1
  219. ysin:        ds.l    1
  220. xpos:        ds.l    1
  221. ypos:        ds.l    1
  222.  
  223.  
  224. draw_oscillos:    cmp.l    #1,colour
  225.         beq.s    .col2
  226.         cmp.l    #2,colour
  227.         beq.s    .col3
  228. .col1:        lea.l    col2+256*32,a5
  229.         move.l    a5,a4
  230.         bra.s    .done
  231. .col2:        lea.l    col1+256*32,a5
  232.         move.l    a5,a4
  233.         bra.s    .done
  234. .col3:        lea.l    col3+256*32,a5
  235.         move.l    a5,a4
  236. .done:        bsr.w    get_left_osci
  237.         move.l    a0,a3
  238.         move.l    scradr1,a0
  239.         add.l    #640*50+2+64,a0
  240.         move.l    a0,a1
  241.         bsr.w    draw_one
  242.         bsr.w    get_right_osci
  243.         move.l    a0,a3
  244.         move.l    scradr1,a0
  245.         add.l    #640*50+256+2+64,a0
  246.         move.l    a0,a1
  247.         bsr.w    draw_one
  248.         rts
  249.  
  250. draw_one:    move.w    #62-1,d7
  251. .loop:        clr.l    d0
  252.         move.w    (a3),d0    
  253.         addq.l    #8,a3
  254.         bge.s    .pos 
  255.         neg.w    d0
  256.         move.l    #-640,d5
  257.         move.l    #-256,d4
  258.         bra.s    .done
  259. .pos:        move.l    #640,d5
  260.         move.l    #256,d4
  261. .done:        lsl.l    #6,d0
  262.         swap    d0
  263.         move.w    d0,d1
  264. .loop2:        move.l    (a5),(a0)
  265.         add.l    d5,a0
  266.         add.l    d4,a5    
  267.         dbra    d0,.loop2
  268.         addq.l    #4,a1
  269.         move.l    a1,a0
  270.         addq.l    #2,a4
  271.         move.l    a4,a5
  272.         dbra    d7,.loop
  273.         rts
  274.  
  275. blur_init:    lea.l    blur_vbl,a0
  276.         bsr.w    set_vblrout
  277.         lea.l    startdata(pc),a0
  278.         add.l    #startbss-startdata,a0
  279.         lea.l    blur_b_red_blue,a3
  280.         lea.l    blur_b_green,a4
  281.         clr.w    d0
  282. .loop:        bfextu    d0{16:5},d1
  283.         move.w    (a3,d1.w*2),d1
  284.         bfextu    d0{21:6},d2
  285.         move.w    (a4,d2.w*2),d2
  286.         bfextu    d0{27:5},d3
  287.         move.w    (a3,d3.w*2),d3
  288.         bfins    d1,d4{16:5}
  289.         bfins    d2,d4{21:6}
  290.         bfins    d3,d4{27:5}
  291.         move.w    d4,(a0)+
  292.         addq    #1,d0
  293.         bne.s    .loop
  294.         lea.l    startdata(pc),a0
  295.         add.l    #startbss-startdata+64*1024*2,a0
  296.         move.l    a0,a1
  297.         add.l    #256*256*2,a1
  298.         lea.l    rawtxt,a2
  299.         move.w    #256*256/2-1,d7
  300. .loop2:        move.l    (a2)+,d0
  301.         move.l    d0,(a0)+
  302.         move.l    d0,(a1)+
  303.         dbra    d7,.loop2
  304.         rts
  305.  
  306.  
  307.  
  308.  
  309. ;ROUTINE SWITCHES VISIBLE SCREEN AND CYCLES THE SCREENADRESSES
  310. switch_screens:    move.l    scradr3,d0
  311.         move.l    scradr2,scradr3
  312.         move.l    scradr1,scradr2
  313.         move.l    d0,scradr1
  314.         movea.l    scradr2,a0
  315.         jsr    set_scradr
  316.         rts
  317.  
  318.         section    data
  319.  
  320.         even
  321. startdata:
  322. lut:        incbin    'blurzoom.dat'
  323.         even
  324. rawtxt:        incbin    'blurzoom.16b'
  325.         even
  326. sinus:        incbin    'sinus.dat'
  327.         even
  328. col1:        incbin    'col1.16b'
  329.         even
  330. col2:        incbin    'col2.16b'
  331.         even
  332. col3:        incbin    'col3.16b'
  333.         even
  334.  
  335. blur_b_red_blue:dc.w    0,0,0,1,2,3,5,5,6,7,8,8,9,10,11,11,12,13,14,14,15,16,17,17,18,19,20,20,21,22,23,23
  336. blur_b_green:    dc.w    0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,17,18,19,20,20,21,22,23,23,24,25,26,26,27,28,29,29
  337.         dc.w    30,31,32,32,33,34,35,35,36,37,38,38,39,40,41,41,42,43,44,44,45,46,47,47
  338.  
  339. scradr1:    dc.l    scr1+256
  340. scradr2:    dc.l    scr2+256
  341. scradr3:    dc.l    scr3+256
  342.  
  343.         section    bss
  344.  
  345.         even
  346. startbss:
  347. colsub:        ds.w    64*1024
  348. text:        ds.w    256*512
  349.  
  350. scr1:        ds.w    320*100
  351. scr2:        ds.w    320*100
  352. scr3:        ds.w    320*100
  353.  
  354.         end
  355.